今天我們終於要開始用Docker實作和部署微服務系統。
簡單說明等下要部署的服務http server和grpc server,使用者可月以透過http來去註冊和登入。
# dockerfile
# Author: 阿榜
# Version: 1.0.0
FROM golang:1.15.2-alpine3.12
LABEL stage=grpcserver
ENV PROJECT /go/src/grpcserver
RUN cd /go/src
RUN mkdir -p $PROJECT
COPY ./ $PROJECT
RUN cd $PROJECT && export GO111MODULE=on && go build -mod vendor
WORKDIR $PROJECT
CMD ["./grpcserver"]
當Dockerfile撰寫完成,可以透過docker build
生成映像檔
docker build -t grpcserver:v1.0.0 -f Dockerfile .
執行完成後就可以得到Image
使用Dockerfile建立http server,步驟同上方grpcserver建立。
使用下方指令將系統啟動
docker run -d -p 8081:8081 --name gs grpcserver:v1.0.0
docker run -d -p 8080:8080 --link gs:gs --name hs httpserver:v1.0.0
➜ ~ docker run -d -p 8081:8081 --name gs grpcserver:v1.0.0
2da78ab780606f6ef95c3c1fbb9de83599e7a743d72f375827cd44d7c514eadb
➜ ~ docker run -d -p 8080:8080 --link gs:gs --name hs httpserver:v1.0.0
f7e5b9c1379d79a8b72b41e7f15746fed30dda3526315d2bc94253f97d275761
➜ ~ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7e5b9c1379d httpserver:v1.0.0 "./httpserver" 13 seconds ago Up 12 seconds 0.0.0.0:8080->8080/tcp hs
2da78ab78060 grpcserver:v1.0.0 "./grpcserver" 22 seconds ago Up 21 seconds 0.0.0.0:8081->8081/tcp gs
➜ ~
大家一定很好奇為什麼會有--link
,之前我們提過容器之間是相互隔離的,因此我們需要透過--link來把hs和gs的container連接在一起。
➜ ~ curl 'http://127.0.0.1:8080/ping'
ping ok
➜ ~ curl -X POST 'http://127.0.0.1:8080/user/add' --data-binary '{"username":"a00017", "password":"1081"}'
使用者新增成功
➜ ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a00017", "password":"1081"}'
使用者登入成功
➜ ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a0001", "password":"1081"}'
使用者登入失敗
➜ ~ curl -X POST 'http://127.0.0.1:8080/user/add' --data-binary '{"username":"a00017", "password":"1081"}'
使用者已新增過
➜ ~ curl -X POST 'http://127.0.0.1:8080/user/add' --data-binary '{"username":"a00018", "password":"0000"}'
使用者新增成功
➜ ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a00018", "password":"0001"}'
使用者登入失敗
➜ ~ curl -X PUT 'http://127.0.0.1:8080/user/login' --data-binary '{"username":"a00018", "password":"0000"}'
使用者登入成功
➜ ~ curl 'http://127.0.0.1:8080/user/list'
["a00017","a00018"]
範例程式都放在github,有需要請自行下載